package game.Enemty;

import javax.swing.*;
import java.awt.*;

/**
 * 游戏中的怪物类，表示可移动的敌人角色
 * 包含怪物的位置、图像、动画帧、移动方向等属性，并处理移动和碰撞检测逻辑
 */
public class Monster {
    public int x, y, height, width; // 怪物的坐标和尺寸
    public int speed; // 移动速度
    public Image enemyImg; // 当前显示的图像
    public Image[] enemyImgs = new Image[8]; // 存储怪物动画帧
    public int direction = 1; // 方向：1 向左，-1 向右
    int index = 0; // 动画帧索引
    private Rectangle bounds; // 表示怪物的边界矩形

    public Monster(int x, int y, int height, int width) {
        this.x = x;
        this.y = y;
        this.height = height;
        this.width = width;
        this.bounds = new Rectangle(x, y, width, height); // 初始化边界矩形
        enemyImg = new ImageIcon("img/Monster/dog/dog1.png").getImage();
        for (int i = 0; i < enemyImgs.length; i++) {
            enemyImgs[i] = new ImageIcon("img/Monster/dog/dog" + (i + 1) + ".png").getImage(); // 加载动画帧
        }
        this.speed = 5;
    }

    /**
     * 控制怪物移动并播放对应动画
     */
    public void moveAndStep() {
        if (direction == 1) {
            this.x -= this.speed; // 向左移动
            index++;
            if (index >= 4) index = 1;
        } else {
            this.x += this.speed; // 向右移动
            index++;
            if (index >= 7) index = 5;
        }

        this.enemyImg = this.enemyImgs[index];

        // 更新边界位置
        bounds.setLocation(x, y);
    }

    /**
     * 检测怪物与障碍物的碰撞，并根据结果调整方向和位置
     * @param obstacleBounds 障碍物的边界矩形
     */
    public void checkMonsterOb(Rectangle obstacleBounds) {
        if (bounds.intersects(obstacleBounds)) {
            // 反转方向
            direction *= -1;

            // 调整怪物位置，防止卡入障碍物
            if (direction == 1) {
                x = obstacleBounds.x - width; // 向左移动到障碍物左侧
            } else {
                x = obstacleBounds.x + obstacleBounds.width; // 向右移动到障碍物右侧
            }

            // 更新边界位置
            bounds.setLocation(x, y);
        }
    }
}
